
const pathUrl = require('./common.js'); 
const BASE_URL = pathUrl;
// 统一请求方法
function request(options) {
  const { url, method = 'GET', data = {}, header = {} } = options;
  return new Promise((resolve, reject) => {
    wx.request({
      url: `${BASE_URL}${url}`, // 拼接完整的请求 URL
      method, // 请求方法（GET 或 POST）
      data, // 请求参数,
      timeout: header.timeout || 10000,
      header: {
        'content-type': method === 'POST' ? 'application/json' : 'application/x-www-form-urlencoded', // 根据请求方法设置默认请求头
        'Authorization': `Bearer ${getToken()}`, // 统一添加的请求头，可以根据需要动态设置
        ...header // 允许用户自定义请求头
      },
      success(res) {
        if (res.statusCode === 200) {
          if(res.data.code === 200){
            resolve(res.data.data); // 请求成功，返回数据
          }else{
            //用户登录失效，引导跳转登录
            if(res.data.code === 10001){
              toLogin(reject,res);
              return
            }
            handlerErr(res.data.message)
            reject(res.data); 
          }
        } else {
          handlerErr('请求错误')
          reject(res); // 请求失败，返回错误信息
        }
      },
      fail(error) {
        handlerErr('网络请求失败');
        reject(error); // 网络请求失败，返回错误信息
      }
    });
  });
}
/**
 * 文件上传并支持表单提交
 * @param {*} options 
 */
function uploadFileWithPromise(options) {
  const { url, data = {}, header = {} } = options;
  return new Promise((resolve, reject) => {
    wx.uploadFile({
      url: `${BASE_URL}${url}`, // 拼接完整的请求 URL
      filePath: data.filePath,//文件地址
      name: data.name,//文件名称
      formData: data.formData, //表单数据 （支持表单提交）
      header: { ...header,'Authorization': `Bearer ${getToken()}` },
      success(res) {
        if (res.statusCode === 200) {
            let resData = JSON.parse(res.data)
            if(resData.code ===200){
              resolve(resData.data); // 成功，返回响应数据
              return
            }else{
              handlerErr(resData.message)
              reject(resData); // 失败，
              return
            }
        } 
        //用户登录失效，引导跳转登录
        if(res.data.code === 10001){
          console.log('失效地址url= ',url)
          toLogin(reject,res);
          return
        }
        handlerErr(res.data.message)
        reject(res.data); // 失败，
      },
      fail(err) {
        handlerErr('网络请求失败');
        reject(err); // 网络或系统错误
      }
    });
  });
}
//文件上传方法(支持表单提交)
function uploadFile(url, data = {}, header = {}) {
  return uploadFileWithPromise({url,data,header});
}

// GET 请求封装
function get(url, data = {}, header = {}) {
  return request({ url, method: 'GET', data, header });
}

// POST 请求封装
function post(url, data = {}, header = {}) {
  return request({ url, method: 'POST', data, header });
}



function getToken() {
  // 从本地存储或全局变量中获取 Token
  return wx.getStorageSync('token');
}

function handlerErr(msg){
  wx.showToast({
    title: msg, // 提示内容
    icon: 'none',  // 图标类型，可选值：'success', 'loading', 'none'
    duration: 1200,   // 提示框显示时长，单位为毫秒
    mask: true,       // 是否显示透明蒙层，防止触摸穿透
  });
}

/**
 * 登录失效特殊处理
 * @param {*} reject 
 * @param {*} response 
 */
function toLogin(reject,response){
  let tipMsg = '登录失效，是否重新登录';
  if(!wx.getStorageSync('token')){
      tipMsg = '是否需要登录';
  }
  wx.showModal({
    title: '登录提醒', // 对话框标题
    content: tipMsg, // 对话框内容
    showCancel: true, // 是否显示取消按钮
    cancelText: '取消', // 取消按钮的文本
    confirmText: '确定', // 确定按钮的文本
    success: function (res) {
      if (res.confirm) {
        wx.navigateTo({
          url: '/pages/login/login',
        })
        reject(response.data); 
      } else if (res.cancel) {
        wx.hideLoading()
        reject(response.data); 
      }
    }
  });
  
}

// 导出方法
module.exports = {
  get,
  post,
  uploadFile
};